#!/usr/bin/env python
# -*- coding: utf-8 -*-

from Agendamento import *
import pickle
import datetime
import random

class ControleAgendamento:
    def __init__(self):
        self.__listaDeAgendamentos = []

#cadastra os agendamentos na lista
    def cadastrarAgendamento(self, AgendamentoID, hora, minutos, dia, mes, ano, Obj_Cliente, servicos):
        self.verificarArquivo()
        if self.procurarAgendamentoID(AgendamentoID) in self.getListaDeAgendamentos():
            return "O ID do agendamento já foi cadastrado"
        else:
            novoAgendamento = Agendamento(AgendamentoID, hora, minutos, dia, mes, ano, Obj_Cliente, servicos)
            self.__listaDeAgendamentos.append(novoAgendamento)
            self.atualizarArquivo()

    def alterarAgendamentoTodo(self, AgendamentoID, hora, minutos, dia, mes, ano, Obj_Cliente, servicos):
        self.verificarArquivo()
        if self.procurarAgendamentoID(AgendamentoID) in self.getListaDeAgendamentos():
            agendamento = self.procurarAgendamentoID(AgendamentoID)
            
            agendamento.SetAgendamentoID(AgendamentoID)
            agendamento.SetHorario(hora, minutos)
            agendamento.SetData(ano, mes, dia)
            agendamento.SetCliente(Obj_Cliente)
            agendamento.SetServicosDoAgendamento(servicos)
            self.atualizarArquivo()
            
    def excluirAgendamento(self,AgendamentoID):
        self.verificarArquivo()
        if self.procurarAgendamentoID(AgendamentoID) in self.getListaDeAgendamentos():
            agendamento = self.procurarAgendamentoID(AgendamentoID)
            posAgendamento = self.getListaDeAgendamentos().index(agendamento)
            self.__listaDeAgendamentos.pop(posAgendamento)
            self.atualizarArquivo()
            print "Agendamento removido com sucesso"
        else:
            print "Agendamento não cadastrado"

###---------------Funções Auxiliares:-------------------###

    def alterarConclusao(self, AgendamentoID):
        self.verificarArquivo()
        if self.procurarAgendamentoID(AgendamentoID) in self.getListaDeAgendamentos():
            agendamento = self.procurarAgendamentoID(AgendamentoID)
            
            agendamento.SetConcluido(True)
            self.atualizarArquivo()
        
#Método auxiliar para carregar a lista de objetos armazenados no arquivo
    def getListaDeAgendamentos(self):
        return self.__listaDeAgendamentos

#procura agendamentos cadastrador por ID, função auxiliar
    def procurarAgendamentoID(self,AgendamentoID):
        self.verificarArquivo() 
        for Agendamento in self.__listaDeAgendamentos:
            if Agendamento.GetAgendamentoID() == AgendamentoID:
                return Agendamento

#procura agendamentos cadastrador por data, função auxiliar
    def procurarAgendamentoData(self,dia,mes,ano):
        data = datetime.date(ano, mes, dia)
        self.verificarArquivo()
        procurado=[]
        for agendamento in self.__listaDeAgendamentos:
            if agendamento.GetData == data:
                procurado.append(agendamento)
        return procurado
            
#Método auxiliar que verifica se o arquivo encontrá-se vazio.
    def verificarArquivo(self):
        arq = open('lista_de_agendamentos.txt','r')
        if arq.read() != '':
            self.carregarListaDeAgendamentos()
            
#carrega o atriuto self.__listaDeAgendamentos com os objetos armazenados nos arquivos
    def carregarListaDeAgendamentos(self):
        nomeArquivo = 'lista_de_agendamentos.txt'
        arquivo = file(nomeArquivo)
        self.__listaDeAgendamentos = pickle.load(arquivo)
        arquivo.close()
            
#Método auxiliar para escrever no arquivo os novos objetos da lista        
    def atualizarArquivo(self):
        arquivo = open('lista_de_agendamentos.txt','w')
        pickle.dump(self.__listaDeAgendamentos,arquivo)
        arquivo.close()

    def GerarNovoID(self):
        self.verificarArquivo()
        ID = ('A'+str(random.randint(0,9))+str(random.randint(0,9))+str(random.randint(0,9))+str(random.randint(0,9)))
        if self.procurarAgendamentoID(ID) in self.getListaDeAgendamentos():
            self.GerarNovoID()
        else:
            return ID
